/**
 * 给你两个二进制字符串，返回它们的和（用二进制表示）。
 * 输入为 非空 字符串且只包含数字 1 和 0。
 * @param {*} a 
 * @param {*} b 
 */
var addBinary = function (a, b) {
  let carry = 0;
  let res = [];
  let ia = a.length - 1;
  let ib = b.length - 1;
  while (ia >= 0 && ib >= 0) {
    let temp = parseInt(a.charAt(ia)) + parseInt(b.charAt(ib)) + carry
    res.push(temp % 2);
    carry = Math.floor(temp / 2);
    ia--;
    ib--;
  }
  while (ia >= 0) {
    let temp = parseInt(a.charAt(ia)) + carry
    res.push(temp % 2);
    carry = Math.floor(temp / 2);;
    ia--;
  }
  while (ib >= 0) {
    let temp = parseInt(b.charAt(ib)) + carry
    res.push(temp % 2);
    carry = Math.floor(temp / 2);;
    ib--;
  }
  if (carry != 0) {
    res.push("" + carry)
    return res.reverse().join('');
  } else {
    return res.reverse().join('');
  }
};
console.log(addBinary("11", "1"))
console.log(addBinary("1010", "1011"))
console.log(addBinary("0", "0"))